Skip to content

jisotalo/shelly-porssisahko

Repository files navigation

shelly-porssisahko - Pörssisähköohjaus Shelly-releisiin

License GitHub Support

Shelly-laitteisiin selaimella ohjattava ilmainen ja avoimen lähdekoodin pörssisähkösovellus. Skripti pyörittää käyttöliittymää omalla web-serverillä ja tallentaa asetukset Shellyn muistiin.

Tämän skriptin avulla voi ohjata Shellyn relekytkintä sähkön hinnan mukaan, ilman rekisteröitymistä mihinkään palveluun.

Skripti käyttää suoraan Viron kantaverkkoyhtiö Eleringin rajapintaa, eli välissä ei ole muita palveluita. Näin ollen rekisteröitymistä ei tarvita, vaan kaikki toimii "suoraan paketista".

g0MPiID21U

Ominaisuudet

  • Ilmainen sekä avoin lähdekoodi
  • Oma web-serveri Shellyn sisällä ja siinä pyörivä käyttöliittymä
  • Ei rekisteröitymistä
  • Valvonta ja konfigurointi nettiselaimen avulla kotiverkossa (PC, puhelin, tabletti)
  • Nykyisen ja seuraavan päivän hinnat sekä toteutuva ohjaus näkyvillä
  • Kolme ohjaustapaa:
    • käsiohjaus - yksinkertaisesti ohjaus päälle/pois
    • hintaraja - jos hinta on alle rajan, laitetaan ohjaus päälle
    • jakson halvimmat tunnit - valitaan halutulta aikajaksolta x halvinta tuntia
  • Mahdollisuus ohjata osatunteja
  • Pakko-ohjaus väliaikaisesti tai aina tietyille tunneille (ohjaus päälle tai pois)
  • Vikasietoinen
    • Varmuustunnit (jos ei hintoja mutta tiedetään kellonaika)
    • Hätätilaohjaus (jos ei internet-yhteyttä eikä tiedetä kellonaikaa)
  • Konfiguroitavuus ja hienosäätö mahdollista omilla skripteillä
  • Todettu toimivaksi ainakin seuraavilla
    • Shelly Plus 1PM
    • Shelly Plus 2PM
    • Shelly Plus 1
    • Shelly Pro 1
    • Shelly Pro 2
    • Shelly Pro 3
    • Shelly Pro 4PM
    • Shelly Pro3EM + Switch Add-on
    • Shelly Plus UNI
    • Shelly Plus 1 Mini
    • Shelly Plus Plug S

Sisällysluettelo

Muutoshistoria

Katso päivitysten sisältö CHANGELOG.md-tiedostosta.

Tarvittaessa vanhat skriptiversiot löytyvät Releases-sivulta. Lataa halutun version zip-tiedosto, ja kopioi dist/shelly-porssisahko.js-tiedoston sisältö.

Asennus

HUOMIO: Skripti vaatii firmwaren 1.0.7 tai uudemman

Asennus kirjaston avulla (suositeltu tapa)

  1. Ota Shelly käyttöön, yhdistä se wifi-verkkoon ja päivitä sen firmware. Avaa Shellyn hallinta nettiselaimella.

  2. Laita Websocket debug päälle (Settings -> Debug -> Enable websocket debug). Näin näet suoraan hallintapaneelin osoitteen skriptin alla.

  3. Avaa Scripts-sivu Shellyn hallinnasta. Poista olemassaolevat skriptit, jos niitä on.

  4. Paina Library-painiketta

    image

  5. Aukeavassa ikkunassa paina Configure URL

    image

  6. Syötä osoitteeksi https://raw.githubusercontent.com/jisotalo/shelly-porssisahko/master/shelly-library.json ja paina Save

    image

  7. Nyt kirjastoon ilmestyy pörssisähköohjaus. Asenna se painamalla Import code

    image

  8. Kun skripti ilmestyy, paina Save

    image

  9. Tallentamisen jälkeen paina Start, jolloin skripti käynnistyy

    image

  10. Jos websocket debug on päällä (kohta 2), näet hallinnan osoitteen suoraan skriptin alla konsolissa. Kopioi tämä osoite ja avaa se selaimella. Jos et näe sitä niin osoite on muotoa http://ip-osoite/script/1

    image

  11. Varmista vielä että skripti käynnistyy aina automaattisesti. Eli Scripts-sivulla pitää shelly-porssisahko.js -skriptin kohdalla olla valinta päällä.

    image

  12. Valmis! Avaa käyttöliittymä selaimessa (kohta 10) ja säädä asetukset kohdilleen Asetukset ja Valmiita esimerkkiasetuksia -kappaleiden ohjeilla.

Asennus käsin

Jos haluat asentaa skriptin käsin, Shelly Smart Control -sovelluksella tai control.shelly.cloud -pilvipalvelun kautta, löydät skriptin osoitteesta https://raw.githubusercontent.com/jisotalo/shelly-porssisahko/master/dist/shelly-porssisahko.js.

Seuraa ylläolevia ohjeita pääpirteittäin, mutta kopioi skriptin sisältö Shellyyn sellaisenaan, kirjaston käytön sijaan.

Skriptin päivitys

Jos haluat päivittää skriptin uusimaan versioon, poista nykyinen skripti ja tee asenna uusi Library-painikkeen kautta. Kaikki asetukset säilyvät. Voit myös päivittää sen käsin (katso Asennus käsin).

HUOMIO: Tämän jälkeen skripti ei enää välttämättä käynnisty automaattisesti. Päivitä Scripts-sivu (esim. painamalla F5 selaimessa) ja laita skripti käynnistymään automaattisesti uudelleen (kuten asennusohjeiden kohdassa 11).

Laitteisto ja sähköinen kytkentä

Olen kehittänyt tämän skriptin alunperin Shelly Plus 1PM -relekytkimelle, jonka saa esimerkiksi Verkkokaupasta tai halvemmalla monelta suomalaiselta jälleenmyyjältä. Se kestää speksien mukaan 16A kuorman, joten ainakin kevyttä sähköpatteria uskaltaa ohjata suoraan.

Jos ohjaat kontaktoria, on suositeltavaa käyttää Shellyn sinisiä laitteita, jotka kestävät paremmin kelan aiheuttamia kytkentäpiikkejä. Näitä ovat esimerkiksi:

  • Shelly Plus 1
  • Shelly Plus 1 Mini
  • Shelly Pro 1, 2 ja 3

Jos kuitenkin käytät esim. Shelly Plus 1PM -laitetta kontaktorin kanssa, RC-suodatin voi auttaa. Jännitepiikit ovat tunnetusti aiheuttaneet laitteen yllättävää uudelleenkäynnistystä.

Lisää hyvää tietoa löytyy Shelly tuki (suomeksi) -ryhmästä.

Asetukset

Yleiset

Nämä asetukset ovat voimassa kaikilla ohjaustavoilla.

image
Asetus Selite Esim. (kuva yllä)
Ohjaustapa Millä ohjaustavalla lähtöä ohjataan.

Selitykset taulukon alapuolella.
jakson halvimmat tunnit
Ohjattavat lähdöt Shellyn ohjattavien lähtöjen ID-numerot.

Jos useampi lähtö, erota pilkulla (max. 4 kpl).

- Yksi lähtö (mm. Shelly Plus 1) --> 0.
- Useampi (esim 0, 1 ja 100) --> 0,1,100
0
Lähdön ohjaus Ohjataanko relelähtö aina haluttuun tilaan vai ainoastaan jos tila muuttuu.

- Aina tarkistaessa: Lähtö ohjataan joka tarkistuksen jälkeen (eli yleensä kerran tunnissa) haluttuun tilaan ja Shellyn sovelluksen tai hallintapaneelin kautta tehty muutos ylikirjoitetaan.
- Vain muuttuessa: Lähtö ohjataan ensimmäisellä kerralla haluttuun tilaan ja sen jälkeen ainoastaan sen muuttuessa.
aina tarkistaessa
Ohjausminuutit Määrittää kuinka monta minuuttia tunnista ohjaus on päällä. Jos tunti on turhan pitkä aika pitää lähtöä päällä, voidaan aika muuttaa lyhyemmäksi. Asetus vaikuttaa kaikkiin ohjauksiin, pois lukien pakko-ohjaus käsin. [min]

Esim. 30 minuuttia riittää aina varaajan lämmittämiseen, joten pidetään vain tunnin ensimmäiset 30 minuuttia ohjausta päällä.
60
Käänteinen ohjaus Jos ruksittu, ohjaus toimii käänteisesti normaaliin nähden. Tällöin lähtökohta on, että lähtö on päällä.

- Varmuustunnit: Lähtö ohjataan varmuustunneilla pois päältä
- Hätätilaohjaus: Lähtö on päinvastainen asetukseen nähden
- Pakko-ohjaukset: Lähtö voidaan pakko-ohjata pois päältä
- Käsiohjaus: Lähtö on päinvastainen asetukseen nähden
- Hintaraja: Jos hinta on alle rajan, lähtö asetetaan pois päältä
- Jakson halvimmat tunnit: Jos nykyinen tunti on halvimpia tunteja, lähtö asetetaan pois päältä
ei
Sähkön ALV Käytettävä ALV-% sähkön hinnalle. [%] 24
Siirtomaksut Jos haluat että siirtomaksut otetaan huomioon, voit syöttää ne päivä- ja yöajalle. Nämä lisätään tuntihintoihin. [c/kWh]

Esim. jos haluat ottaa erisuuruiset siirtomaksut huomioon tuntien valinnassa.
päivä: 4
yö: 3
Varmuustunnit Jos sähkön hintaa ei jostain syystä tiedetä, ohjataan lähtö näillä tunneilla päälle.

Esim. ongelma hintojen haussa tai nettiyhteys katkeaa.
01:00-07:00
Hätätilaohjaus Jos Shelly ei jostain syystä tiedä kellonaikaa, ohjataan lähtö tähän tilaan varmuuden vuoksi.

Esim. jos sähkökatkon jälkeen nettiyhteys ei palaudu (ei hintoja eikä kellonaikaa).
ON
Pakko-ohjaukset Voidaan määrittää tunnit, jolloin ohjaus asetetaan joko päälle tai pois riippumatta sähkön hinnasta ja muista ohjauksista (pl. pakko-ohjaus käsin).

Esim. jos haluat lämmittää varajaa joka aamu tai estää ohjauksen tiettynä osana vuorokaudesta.
05:00-07:00 ja 19:00-21:00 päällä

01:00-02:00 pois

Ohjaustapa: Käsiohjaus

Käsiohjauksella lähtö ohjataan käyttöliittymältä asetettuun tilaan.

image

Asetus Selite Esim. (kuva yllä)
Ohjaus Asetetaanko lähtö päälle vai pois ON

Ohjaustapa: Hintaraja

Hintarajaohjauksella lähtö asetetaan päälle jos sähkön hinta on alle määritellyn rajan (tai juuri sen verran).

image

Asetus Selite Esim. (kuva yllä)
Hintaraja Hinta, jossa ja jonka alla lähtö asetetaan päälle. [c/kWh]

Voit syöttää tähän myös arvon avg, jolloin käytetään päivän hinnan keskiarvoa.
4.25

Ohjaustapa: Jakson halvimmat tunnit

Jakson halvimmat tunnit -ohjauksella vuorokausi jaetaan osiin. Lähtö ohjataan päälle jokaisen osan halvimmmilla tunneilla. Lisäksi voidaan määrittää raja jonka alla ohjaus on aina päällä.

image

Asetus Selite Esim. (kuva yllä)
Ajanjakso Minkä mittaisiin jaksoihin vuorokausi jaetaan. Jokaiselta jaksolta haetaan sitten halvimmat tunnit. [h]

HUOMIO: Versiosta 2.12.0 lähtien vaihtoehtona on myös oma valinta. Tällöin kellonajat voidaan syöttää itse. Katso lisätietoa kappaleesta Jakson halvimmat tunnit - omavalintaiset jaksot
6
Tuntimäärä Kuinka monta halvinta tuntia lähtö ohjataan päälle ajanjakson aikana.

Eli jos ajanjakso on 6h ja tuntimäärä 2, kello 00:00-06:00 lähtö ohjataan päälle kahtena halvimpana tuntina. Kuten myös kello 06:00-12:00 ja niin edelleen.
2
Peräkkäiset Jos käytössä, valitaan jakson tunnit siten että ne ovat peräkkäin.

Näin yksittäisiä halvimpia tunteja ei välttämättä hyödynnetä, mutta halvin mahdollinen yhtenäinen jakso otetaan käyttöön. Katso esimerkki alta.
ei
Aina päällä -raja Jos sähkö on tätä halvempaa (tai juuri tämän hintaista) niin lähtö on aina päällä. [c/kWh]

Voit syöttää tähän myös arvon avg, jolloin käytetään päivän hinnan keskiarvoa.
-0.5
Maksimihinta Jos sähkön hinta on tätä korkeampi, lähtöä ei aseteta päälle vaikka tunti olisikin halvimpia tunteja. [c/kWh]

Voit syöttää tähän myös arvon avg, jolloin käytetään päivän hinnan keskiarvoa.

Tämän kanssa pitää olla tarkkana, jos tulee kalliita päiviä.
30

Alla esimerkki miten ohjaukset toteutuivat 12.10.2023 hinnoilla ja yllä olevilla asetuksilla (6h, 2 halvinta tuntia, aina päällä -raja -0.5 c/kWh). Huomaa jaksojen korostus taustavärillä.

image

Alla on havainnollistettu peräkkäiset-asetuksen vaikutusta. Esimerkkikuvissa asetuksena on 4h ajanjakso ja tuntimäärä 3.

Ei käytössä (oletusarvo):

Valitaan kolme halvinta tuntia.

image

Käytössä:

Valitaan kolme perättäistä tuntia. Valitaan kello 17-19 koska niiden hinnan keskiarvo on pienempi kuin kello 16-18.

image

Jakson halvimmat tunnit - omavalintaiset jaksot

Versiosta 2.12.0 lähtien voidaan vaihtoehtoisesti syöttää yksi tai kaksi omavalintaista jaksoa tuntimäärineen. Tämän avulla saadaan helposti tehtyä esimerkiksi "kolme halvinta tuntia yöllä kello 00-06 väliltä ja yksi halvin tunti illalla kello 18-21 väliltä" -tyylinen ohjaus.

Valittaessa ajanjaksoksi oma valinta, voidaan syöttää halutut kellonajat ja tuntimäärät alla olevan kuvan mukaisesti.

image

Tällöin ohjaus voisi mennä esimerkiksi seuraavasti:

image

Toiminnot

image

  • Pakko-ohjaus
    • Painamalla tätä voit asettaa lähdön päälle tai pois määritellyksi ajaksi
    • Syötä kysyttäessä kuinka monta tuntia pakko-ohjaus on käytössä sekä haluttu lähdön tila (voit syöttää myös osatunteja, esim. 0.5 on puoli tuntia)
  • Shelly
    • Avaa uudessa välilehdessä Shellyn oman hallintasivun

Valmiita esimerkkiasetuksia

Koska asetuksia on nykyään niin paljon, ajattelin listata tähän esimerkkejä.

Yön halvimmat tunnit

  • Kolme halvinta tuntia väliltä 00:00-06:00
  • Jos hinnat ei tiedossa, ohjaus päällä 01:00-04:00
  • Jos yhteysvika, ohjaus päällä

image

Yön ja illan halvimmat tunnit

  • Kolme halvinta tuntia väliltä 00:00-06:00
  • Yksi halvin tunti välillä 18:00-21:00
  • Jos hinnat ei tiedossa, ohjaus päällä 01:00-04:00
  • Jos yhteysvika, ohjaus päällä

image

Vuorokauden halvimmat tunnit

  • Viisi halvinta tuntia vuorokaudelta
  • Jos hinta alle 2 c/kWh, ohjaus on aina päällä
  • Jos hinnat ei tiedossa, ohjaus päällä 02:00-04:00 ja 14:00-16:00
  • Jos yhteysvika, ohjaus päällä

image

Joka 12 tunnin jakson halvimmat peräkkäiset tunnit

  • Neljä halvinta peräkkäistä tuntia kahdelta jaksolta (eli yhteensä 8 tuntia)
    • 00:00 - 12:00 (4 tuntia)
    • 12:00 - 24:00 (4 tuntia)
  • Jos hinta alle 2 c/kWh, ohjaus on aina päällä
  • Jos hinnat ei tiedossa, ohjaus päällä 00:00-05:00, 14:00-15:00 ja 20:00-22:00
  • Jos yhteysvika, ohjaus päällä

image

Alle päivän keskiarvon

  • Ohjaus on päällä kun hinta on alle vuorokauden keskiarvon
  • Jos halpa tunti, ohjaus on kuitenkin päällä vain tunnin ensimmäiset 45 minuuttia
    • Eli jos on peräkkäisiä tunteja, niiden välissä on 15 min tauko
  • Jos hinnat ei tiedossa, ohjaus päällä 00:00-06:00
  • Jos yhteysvika, ohjaus päällä

image

Lisätoiminnot ja omat skriptit

Versiosta 2.8.0 lähtien on mahdollista lisätä omaa toiminnallisuutta pörssisähköohjuksen rinnalle. Tämä tapahtuu lisäämällä omaa koodia skriptin perään. Idea on, että pörssisähköohjauksen asetuksia tai ohjausta voidaan hienosäätää tarpeen mukaan, esimerkiksi lämpötilan perusteella. Alla oleva esimerkit voi asentaa Library-painikkeen takaa.

Alla esimerkki, kuinka käyttöliittymä näyttää Shelly H&T:n lämpötilaa hyödyntävän ohjauksen tilan: image

Globaalit muuttujat

Skriptissä on saatavilla globaali muuttuja _, joka sisältää skriptin tilan. Sen kuvaus löytyy koodista: https://github.com/jisotalo/shelly-porssisahko/blob/master/src/shelly-porssisahko.js#L78

Ohjauksen muutokset (USER_OVERRIDE)

Kun skripti on todennut ohjauksen tilan, kutsuu se funktiota USER_OVERRIDE, mikäli se on määritelty. Tässä funktiossa voidaan vielä tehdä viime hetken muutoksia skriptin ohjaukseen.

Vaihtoehtoisesti voidaan myös käskeä skriptiä ajamaan logiikka uudelleen. Tämä voi olla hyödyllistä esimerkiksi jos asetuksia on muutettu ja halutaan suorittaa logiikka heti uusilla asetuksilla.

USER_OVERRIDE(cmd: boolean, state: object, callback: function(boolean|null)) => void

parametri tyyppi selite
cmd boolean Skriptin määrittämä lopullinen komento (ennen mahdollista käänteistä ohjausta)
state object Skriptin tila, sama kuin globaali muuttuja _.

Selitykset koodissa: https://github.com/jisotalo/shelly-porssisahko/blob/master/src/shelly-porssisahko.js#L78 (esim state.s.p.now)
callback function(boolean|null) Takaisinkutsufunktio, jota täytyy kutsua lopullisella komennolla, esim: callback(true).

Jos parametri on null, eli kutsu on callback(null), ohjausta ei aseteta, vaan logiikka ajetaan hetken päästä uudelleen.
paluuarvo void Ei paluuarvoa

Asetusten muutokset (USER_CONFIG)

Kun skripti on hakenut asetukset muistista tai kun pörssisähköohjauksen logiikan suoritus alkaa, kutsuu se funktiota USER_CONFIG, mikäli se on määritelty. Tässä funktiossa voidaan ylikirjoittaa yksittäisiä tai kaikki asetukset. Näin asetukset voidaan määrittää skriptissä ilman käyttöliittymää (esim. Shellyn pilvipalvelun kautta) tai niitä voidaan muuttaa lennossa esimerkiksi lämpötilaan perustuen.

USER_CONFIG(config: object, state: object, initialized: boolean) => object

parametri tyyppi selite
config object Skriptin tämänhetkiset asetukset
state object Skriptin tila, sama kuin globaali muuttuja _.

Selitykset koodissa: https://github.com/jisotalo/shelly-porssisahko/blob/master/src/shelly-porssisahko.js#L78 (esim state.s.p.now)
initialized boolean true jos funktiota kutsutaan asetusten muistista hakemisen jälkeen, false jos kyseessä on logiikan suoritus. Tämän avulla tietää, onko aktiiviset asetukset tallennetut (true) vai mahdollisesti ylikirjoitetut. Näin esim. alkuperäiset käyttöliittymältä tallennetut asetukset voidaan ottaa talteen.
paluuarvo object Lopulliset asetukset, joita halutaan käyttää

Esimerkki: Ohjauksen muutos keskiarvon avulla

Tämä esimerkki näyttää kuinka voi hyödyntää hintatietoja ohjauksen hienosäätöön.

Asenna esimerkkiskripti nimeltä ESIMERKKI: Ohjauksen muutos keskiarvon avulla Library-painikkeen takaa. Voit myös kopioida sen käsin alla olevasta linkistä.

Skripti asettaa ohjauksen pois, mikäli tuntihinta on yli 80% päivän keskiarvosta. Muuten mennään pörssisähköohjauksen mukaan.

Esimerkin koodi: https://github.com/jisotalo/shelly-porssisahko/blob/master/dist/shelly-porssisahko-override-avg-price.js

Esimerkki: Ohjaustuntien asetus lämpötilan perusteella (Shelly Plus Add-On ja DS18B20)

Tämä esimerkki näyttää, kuinka voi hyödyntää mitattua ulkolämpötilaa ohjaustuntien hienosäädössä.

Asenna esimerkkiskripti nimeltä ESIMERKKI: Ohjaustuntien asetus lämpötilan perusteella (Shelly Plus Add-On ja DS18B20) Library-painikkeen takaa. Voit myös kopioida sen käsin alla olevasta linkistä.

Käyttää lämpötila-anturia, jonka id on 100.

Esimerkin toiminta

  • Jos lämpötila on alle -15°C, laitetaan halvimpien tuntien määräksi 8h ja ohjausminuuteksi 60min
  • Jos lämpötila on alle -10°C, laitetaan halvimpien tuntien määräksi 7h ja ohjausminuuteksi 45min
  • Jos lämpötila on alle -5°C, laitetaan halvimpien tuntien määräksi 6h ja ohjausminuuteksi 45min
  • Muuten annetaan ohjata pörssisähköohjauksen asetusten mukaan

Esimerkin koodi: https://github.com/jisotalo/shelly-porssisahko/blob/master/dist/shelly-porssisahko-addon-temp-hours.js

Esimerkki: Ohjaustuntien asetus lämpötilan perusteella (erillinen Shelly H&T)

Tämä esimerkki näyttää, kuinka voi hyödyntää toisen Shelly H&T:n lämpötilamittausta ohjaustuntien hienosäädössä. Eli pörssisähköskripti pyörii relelähdön omaavassa Shellyssä ja erikseen on ulkolämpötilaa mittaava Shelly H&T.

Asenna esimerkkiskripti nimeltä ESIMERKKI: Ohjaustuntien asetus lämpötilan perusteella (erillinen Shelly H&T) Library-painikkeen takaa. Voit myös kopioida sen käsin alla olevasta linkistä.

HUOM: Tämä vaatii, että Shelly H&T asetetaan actions -> sensor reports alle osoite http://ip-osoite/script/1/update-temp, missä IP-osoite on pörssisähköskriptiä pyörittävän Shellyn osoite. Lisäksi sensor reports pitää ruksia käyttöön. Näin kyseinen laite lähettää lämpötilan tähän osoitteeseen.

Esimerkin toiminta

  • Jos lämpötila on alle -15°C, laitetaan halvimpien tuntien määräksi 8h ja ohjausminuuteksi 60min
  • Jos lämpötila on alle -10°C, laitetaan halvimpien tuntien määräksi 7h ja ohjausminuuteksi 45min
  • Jos lämpötila on alle -5°C, laitetaan halvimpien tuntien määräksi 6h ja ohjausminuuteksi 45min
  • Muuten annetaan ohjata pörssisähköohjauksen asetusten mukaan

Esimerkin koodi: https://github.com/jisotalo/shelly-porssisahko/blob/master/dist/shelly-porssisahko-ht-sensor-temp.js

Esimerkki: Ohjauksen rajoitus lämpötilan avulla (Shelly Plus Add-On ja DS18B20)

Tämä esimerkki näyttää, kuinka voi hyödyntää lämpötilamittausta ohjauksen rajoituksessa siten, että ei lämmitetä turhaan mutta ei myöskään päästetä liian kylmäksi.

Asenna esimerkkiskripti nimeltä Esimerkki: Ohjauksen rajoitus lämpötilan avulla (Shelly Plus Add-On ja DS18B20) Library-painikkeen takaa. Voit myös kopioida sen käsin alla olevasta linkistä.

Käyttää lämpötila-anturia, jonka id on 100.

  • Jos lämpötila on yli 15 astetta, asetetaan lähtö aina pois
  • Jos lämpötila on alle 5 astetta, asetetaan se aina päälle
  • Muuten annetaan ohjata pörssisähköohjauksen mukaan

Esimerkin koodi: https://github.com/jisotalo/shelly-porssisahko/blob/master/dist/shelly-porssisahko-addon-temp.js

Esimerkki: Ulkolämpötilan hakeminen Open-Meteo-sääpalvelusta ja sen hyödyntäminen

Tämä esimerkki hakee koordinaattien perusteella kuluvan vuorokauden alhaisimman ja korkeimman lämpötilan Open-Meteo-sääpalvelun API-rajapinnasta. Alhaisimman lämpötilan perusteella valitaan ohjaustuntien määrä ja ohjausminuutit.

Säätiedot haetaan vain kerran vuorokaudessa tai asetusten muuttuessa. Open-Meteo ei vaadi rekisteröitymistä.

Asenna esimerkkiskripti nimeltä Esimerkki: Ulkolämpötilan hakeminen Open-Meteo-sääpalvelusta ja sen hyödyntäminen Library-painikkeen takaa. Voit myös kopioida sen käsin alla olevasta linkistä.

Esimerkin toiminta

  • Käytetään Tampereen koordinaatteja
  • Jos vuorokauden alhaisin lämpötila on alle -15°C, laitetaan halvimpien tuntien määräksi 8h ja ohjausminuuteksi 60min
  • Jos vuorokauden alhaisin lämpötila on alle -10°C, laitetaan halvimpien tuntien määräksi 7h ja ohjausminuuteksi 45min
  • Jos vuorokauden alhaisin lämpötila on alle -5°C, laitetaan halvimpien tuntien määräksi 6h ja ohjausminuuteksi 45min
  • Muuten annetaan ohjata pörssisähköohjauksen asetusten mukaan

Esimerkin koodi: https://github.com/jisotalo/shelly-porssisahko/blob/master/dist/shelly-porssisahko-open-meteo-api.js

Esimerkki: Asetusten määrittäminen skriptissä (ilman käyttöliittymää)

Jos et halua käyttää tai pysty käyttämään selainpohjaista käyttöliittymää, voidaan asetukset määrittää myös skriptissä (versiosta 2.8.0 alkaen). Tämä tapahtuu lisäämällä skriptin perään uusi funktio USER_CONFIG.

Tämä myös mahdollistaa asetusten muuttamisen esimerkiksi etänä Shellyn pilvipalvelusta käsin skriptiä muokkaamalla. Huomaa, että käyttöliittymästä tehdyt asetusmuutokset ylikirjoitetaan.

Asenna esimerkkiskripti nimeltä ESIMERKKI: Asetusten määrittäminen skriptissä Library-painikkeen takaa. Voit myös kopioida sen käsin alla olevasta linkistä.

Esimerkin koodi: https://github.com/jisotalo/shelly-porssisahko/blob/master/dist/shelly-porssisahko-user-config.js

Voit myös halutessasi hyödyntää nykyisiä asetuksia ja vain muokata jotain niistä, sillä funktion parametri config sisältää tallennetut asetukset.

Esimerkki: Olet laittanut asetukset kuntoon kotona, mutta huomaat reissun päällä että halvimpia tunteja pitäisikin olla neljän sijaan viisi. Voit tehdä muutoksen etänä pilvipalvelusta lisäämällä alla olevan koodin skriptin perään:

function USER_CONFIG(config) {
  //Muutetaan vain "halvimmat tunnit" -ohjauksen tuntimäärä arvoon 5
  //Muuten asetukset pysyy samana
  config.m2.cnt = 5;
  
  return config;
}

Kysymyksiä ja vastauksia

Miksi välillä tulee HTTP error 503?

Tällä hetkellä jos skripti hakee hintoja tai suorittaa ohjauslogiikkaa, vastataan kaikkiin HTTP-pyyntöihin 503 (Service Unavailable). Käyttöliittymä osaa hallita tämän.

Jos hintojen hakeminen ei onnistu, voi tämä virhe tulla käyttöliittymää avatessa (hintojen haun aikakatkaisu on 5s --> pahimmillaan virhe voi tulla 5 sekunnin ajan). Yritä avata sivu uudelleen.

Voi olla että muutan tätä myöhemmin, vaatii vielä testejä. Syy on jälleen muistin säästäminen.

Miten ohjaan ainoastaan yön halvimmilla tunneilla?

Versiosta 2.12.0 lähtien tämä onnistuu helposti. Valitse ajanjaksoksi oma valinta (1 jakso) ja aseta asetukset. Katso Jakson halvimmat tunnit - omavalintaiset jaksot.

Vanhemmat versiot: Aseta ohjaustavaksi jakson halvimmat tunnit ja päivän siirtohinnaksi 999 c/kWh. Näin kaikki päivätunnit ovat kalliita ja halvimmat tunnit valitaan sen johdosta yöajalta.

Miten saan lähdön päälle aina jos sähkön hinta on keskiarvon alapuolella?

Versiosta 2.6.0 lähtien tämä onnistuu valitsemalla ohjaustavaksi hintaraja ja asettamalla hintarajaksi arvon avg.

Miksi laitteen nimen kohdalla lukee "Ei asetettu"?

Et ole asettanut laitteelle nimeä Shellyn hallinnasta. Nimen voit asettaa Settings -> Device name alta.

Huomaa, että tehdasasetuksena nimen kohdalla lukee lukee laitteen malli. Tämä näkyy silti pörssisähköskriptille tyhjänä.

Kuinka saa skriptin toimimaan Switch Add-Onin kanssa?

Testattu Shelly Pro3EM + Switch Add-on.

Kun olet asentanut add-onin, näet lähdön numeron Shellyn hallinnassa. Alla olevassa esimerkissä lähdön numero on 100.

image

Muuta skriptin asetuksista ohjattavat lähdöt kyseiseen arvoon, jolloin ohjaus toimii.

Milloin seuraavan päivän hinnat haetaan? Miksi hintoja ei näy vaikka kello on 14?

Seuraavan päivän hinnat haetaan kello 15.

Elering tuntui päivittävän ne rajapintansa puoli kolmen kieppeillä, joten aiemmin yrittäminen on turhaa.

Teknistä tietoa ja kehitysympäristö

Lyhyesti

  • Skriptin tekemisen alkuvaiheessa Shellyn firmware ei hallinnut muistia kunnolla -> muistista oli kokoajan pulaa. Tämän takia monet asiat on optimoitu äärimilleen, vaikka enää ei ehkä tarvitsisi
  • Shellyyn asennattava skripti on "kääntöprosessin" tulos, jotta skripti saadaan mahtumaan mahdollisimman pieneen tilaan
  • Koodissa on jonkin verran outoja ja rumia temppuja, mitä en tekisi muualla
    • Näiden syy on usein minimoida skriptin kokoa, joko suoraan tai helpottamalla minimointikirjastojen toimintaa
    • Esim: document.querySelector() on korvattu qs() jolloin säästetään paljon tilaa
    • Esim: typerät mahdollisimman lyhyet muuttujanimet ja kentät
  • Staattiset web-serverin tiedostot (html, css, js) minimoidaan, pakataan gzip-muotoon ja base64-enkoodataan
    • Nämä tiedostot sisällytetään shelly-porssisahko.js-skriptiin
      • Esim atob('#[tab-config.js]') korvataan kyseisen tiedoston pakatulla sisällöllä, joten lopputulos on luokkaa atob("H4sIAAAAAAAACo1...
  • Myös shelly-porssisahko.js minimoidaan
  • Käyttää elering.ee:n CSV-muotoista API:a (JSON vie liikaa muistia)

Tiedostot ja kansiot

  • src/shelly-porssisahko.js
    • Itse skripti, ei kuitenkaan ajettavissa Shellyssä (vaatii "kääntämisen")
  • src/after-build-examples/
    • Esimerkkiskriptit, jotka yhdistetään shelly-porssisahko.js kanssa käännön lopussa
  • src/statics/
    • Staattiset html, js ja css -tiedostot
  • dist/shelly-porssisahko.js
    • "Käänetty" valmis skripti joka voidaan laittaa ajoon
    • Minimoitu ja sisältää myös staattiset tiedostot
  • dist/*.js
    • Muut käännetyt esimerkkiskriptit
    • Minimoitu ja sisältää myös staattiset tiedostot
  • dist/statics/
    • Staattiset tiedostot, jotka muodostuvat kääntöprosessin aikana, debuggausta varten
    • Minimoidut staattiset tiedostot sekä pakatut versiot
    • Ei sisälly versiohallintaan

Muistin käyttö

Skriptin versio 2.11.0 vie enimillään hetkellisesti noin 15kt RAM-muistia (Shellyn maksimi 25200).

"script:1": {
  "id": 1,
  "running": true,
  "mem_used": 9240,
  "mem_peak": 14854,
  "mem_free": 15960
},

Kehitysympäristö

Käyttää Node.js -ympäristöä.

Kääntöprosessi:

  1. Asenna Node.js
  2. Kloonaa repository ja avaa terminaali shelly-porssisahko-kansiossa
  3. Aja komento npm i asentaaksesi kirjastot
  4. Aja komento npm run build kääntääksesi projektin
  5. Valmis skripti löytyy dist/shelly-porssisahko.js

Komentoja

  • npm run build
    • "kääntää" eli tekee valmiin dist/shelly-porssisahko.js-skriptin
  • npm run upload
    • lähettää dist/shelly-porssisahko.js-skriptin määritettyyn shellyyn ja käynnistää sen
  • npm start
    • ajaa npm run build ja sen jälkeen npm run upload
  • npm run debug
    • kuuntelee porttiin 8001 tulevaa UDP-dataa
    • aseta shellystä UDP debug muotoon ip_osoitteesi:8001
  • npm run serve
    • käyttöliittymän kehitystä varten
    • käynnistää paikallisen web-serverin ja tarjoaa src/statics/ -kansion tiedostot portista 3000

In English

This is a script to control relay by Nordpool electric spot prices for Shelly products with web-based user interface.

At the moment it's available only in Finnish and the spot price is queried for Finland.

There will be an English version (maybe with country selection) available later when I have an insipiration to work on it.

License

GNU Affero General Public License v3.0 - LICENSE.txt

Huomaathan, että projekti on täysin harrasteena tehty, eikä siinä ole lisenssin mukaisesti mitään takuuta. Näin ollen tekijä ei ole vastuussa jos sen käytön kanssa on ongelmia.